package database

import (
	"admin-nexus-backend/config"
	"admin-nexus-backend/pkg/captcha"
	"context"
	"fmt"
	"time"

	"github.com/redis/go-redis/v9"
)

var RDB *redis.Client

// InitRedis 初始化 Redis 连接
func InitRedis() error {
	c := config.GlobalConfig.Database.Redis

	RDB = redis.NewClient(&redis.Options{
		Addr:         config.GetRedisAddr(),
		Password:     c.Password,
		DB:           c.DB,
		PoolSize:     c.PoolSize,
		MinIdleConns: c.MinIdleConns,
		MaxRetries:   c.MaxRetries,
	})

	// 测试连接
	ctx := context.Background()
	if err := RDB.Ping(ctx).Err(); err != nil {
		return fmt.Errorf("Redis 连接测试失败: %w", err)
	}

	return nil
}

// CloseRedis 关闭 Redis 连接
func CloseRedis() error {
	if RDB != nil {
		return RDB.Close()
	}
	return nil
}

// GetRedis 获取 Redis 客户端
func GetRedis() *redis.Client {
	return RDB
}

// InitCaptcha 初始化验证码服务
func InitCaptcha() {
	// 即使RDB为nil，也调用InitCaptcha，让captcha包内部处理nil的情况
	captcha.InitCaptcha(RDB, 5*time.Minute)
}
